package com.clarence.dada.modular.system.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.clarence.dada.core.auth.entity.dto.UserLoginInfoDto;
import com.clarence.dada.core.auth.entity.dto.UserValidateDTO;
import com.clarence.dada.core.base.PageResult;
import com.clarence.dada.modular.system.user.entity.SysUserEntity;
import com.clarence.dada.modular.system.user.entity.req.SysUserReq;
import com.clarence.dada.modular.system.user.entity.resp.SysUserResp;

import java.util.List;

/**
 * 系统用户service
 *
 * @author GD
 * @since 2020/11/6 10:28
 */
public interface SysUserService extends IService<SysUserEntity> {

    /**
     * 增加用户
     *
     * @param sysUserReq 请求参数封装
     * @author GD
     * @since 2020/11/21 12:32
     */
    void userAdd(SysUserReq sysUserReq);

    /**
     * 删除系统用户
     *
     * @param sysUserReq 删除参数
     * @author GD
     * @since 2020/11/21 14:54
     */
    void userDelete(SysUserReq sysUserReq);

    /**
     * 编辑用户
     *
     * @param sysUserReq 请求参数封装
     * @author GD
     * @since 2020/11/21 12:32
     */
    void userEdit(SysUserReq sysUserReq);

    /**
     * 更新用户信息（一般用于更新个人信息）
     *
     * @param sysUserReq 请求参数封装
     * @author GD
     * @since 2020/11/21 12:32
     */
    void editInfo(SysUserReq sysUserReq);

    /**
     * 修改状态
     *
     * @param sysUserReq 请求参数封装
     * @author GD
     * @since 2020/11/21 14:19
     */
    void userUpdateStatus(SysUserReq sysUserReq);

    /**
     * 修改密码
     *
     * @param sysUserReq 请求参数封装
     * @author GD
     * @since 2020/11/21 14:26
     */
    void editPassword(SysUserReq sysUserReq);

    /**
     * 重置密码
     *
     * @param sysUserReq 重置参数
     * @author GD
     * @since 2020/11/6 13:47
     */
    void userResetPassword(SysUserReq sysUserReq);

    /**
     * 修改头像
     *
     * @param sysUserReq 修改头像参数
     * @author GD
     * @since 2020/11/6 13:47
     */
    void editAvatar(SysUserReq sysUserReq);
//
//    /**
//     * 授权角色给某个用户
//     *
//     * @param sysUserVo 授权参数
//     * @author GD
//     * @since 2020/11/21 14:43
//     */
//    void grantRole(SysUserVo sysUserVo);
//
//    /**
//     * 授权组织机构数据范围给某个用户
//     *
//     * @param sysUserVo 授权参数
//     * @author GD
//     * @since 2020/11/21 14:48
//     */
//    void grantData(SysUserVo sysUserVo);

    /**
     * 查看用户详情
     *
     * @param sysUserReq 查看参数
     * @return 用户详情结果
     * @author GD
     * @since 2020/11/6 13:46
     */
    SysUserResp userDetail(SysUserReq sysUserReq);

    /**
     * 查询系统用户
     *
     * @param sysUserReq 查询参数
     * @return 查询分页结果
     * @author GD
     * @since 2020/11/21 15:24
     */
    PageResult<SysUserResp> userPage(SysUserReq sysUserReq);

    /**
     * 查询系统用户
     *
     * @param sysUserReq 查询参数
     * @return 查询分页结果
     * @author GD
     * @since 2020/11/21 15:24
     */
    List<SysUserResp> getUserList(SysUserReq sysUserReq);

//
//    /**
//     * 用户选择树数据
//     *
//     * @param sysUserVo 参数
//     * @author liuhanqing
//     * @since 2021/1/15 11:16
//     */
//    List<UserSelectTreeNode> userSelectTree(SysUserVo sysUserVo);

    /**
     * 根据账号获取用户
     *
     * @param account 账号
     * @return 用户
     * @author GD
     * @since 2020/11/6 15:09
     */
    SysUserEntity getUserByAccount(String account);

    /**
     * 获取用户头像的url
     *
     * @param fileId 文件id
     * @author GD
     * @since 2020/12/27 19:13
     */
    String getUserAvatarUrl(Long fileId);

    /**
     * 获取用户头像的url
     *
     * @param fileId 文件id
     * @param token  预览文件带的token
     * @author GD
     * @since 2020/12/27 19:13
     */
    String getUserAvatarUrl(Long fileId, String token);

//    /**
//     * 根据机构id获取用户树节点列表
//     *
//     * @param orgId 机构id
//     * @author liuhanqing
//     * @since 2021/1/15 11:16
//     */
//    List<UserSelectTreeNode> getUserTreeNodeList(Long orgId, List<UserSelectTreeNode> treeNodeList);
//
//    /**
//     * 用户下拉列表选择
//     *
//     * @param sysUserVo 查询参数
//     * @return 用户列表集合
//     * @author GD
//     * @since 2020/11/6 13:47
//     */
//    List<SimpleDict> selector(SysUserVo sysUserVo);
//
//    /**
//     * 批量删除用户
//     *
//     * @author GD
//     * @since  2021/4/7 16:13
//     */
//    void batchDelete(SysUserVo sysUserVo);
//
//    /**
//     * 获取所有用户的id
//     *
//     * @author GD
//     * @since 2021/6/20 12:10
//     */
//    List<Long> getAllUserIds();
//
//    /**
//     * 获取所有用户ID和名称列表
//     *
//     * @return {@link List<SysUserVo>}
//     * @author GD
//     * @since 2022/1/17 15:05
//     **/
//    List<SysUserVo> getAllUserIdList();
//
//    /**
//     * 根据用户主键获取用户对应的token
//     *
//     * @return {@link String}
//     * @author GD
//     * @since 2022/1/17 15:05
//     **/
//    String getTokenByUserId(Long userId);
//
//    /**
//     * 运维平台接口检测
//     *
//     * @return {@link Integer}
//     * @author GD
//     * @since 2022/1/27 14:29
//     **/
//    Integer devopsApiCheck(SysUserVo sysUserVo);

    /**
     * 获取用户登录需要的详细信息（用在第一次获取登录用户）
     *
     * @param account 账号
     * @return 用户登录需要的详细信息
     * @author fengshuonan
     * @date 2020/10/20 16:59
     */
//    UserLoginInfoDto getUserLoginInfo(String account);


    /**
     * 获取用于用户校验的
     *
     * @param account  用户账号
     * @author fengshuonan
     * @since 2023/6/17 21:56
     */
    UserValidateDTO getUserLoginValidateDTO(String account);


}
